/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package RRHH_controlador;

import Conexion.Conexion;
import RRHH_Modelo.RHH_ACTIVIDAD_CARGO;
import RRHH_Modelo.RHH_CALENDARIO_EMPRESA;
import RRHH_Modelo.RHH_TIPO_DIA;
import RRHH_Modelo.RHH_USUARIO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author equipo_4
 */
@WebServlet(name = "RHH_CALENDARIO_EMPRESA_CONTROLLER", urlPatterns = {"/RHH_CALENDARIO_EMPRESA_CONTROLLER"})
public class RHH_CALENDARIO_EMPRESA_CONTROLLER extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet RHH_CALENDARIO_EMPRESA_CONTROLLER</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet RHH_CALENDARIO_EMPRESA_CONTROLLER at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String evento = request.getParameter("evento");
            RHH_USUARIO usuario = ((RHH_USUARIO)request.getSession().getAttribute("usr"));
                Conexion con = new Conexion(usuario.getUSUARIO(), usuario.getPASSWORD());
            String html="";
            switch(evento)
            {
                case "cambiomes":
                    html= cambiomes(request,con);
                    break;
                case "cargatipos":
                    html= cargatipos(request,con);
                    break;
                case "cambiartipo":
                    html= cambiartipo(request,con);
                    break;
                case "creartipo":
                    html= creartipo(request,con);
                    break;
                case "crearFinesDeSemana":
                    html= crearFinesDeSemana(request,con);
                    break;
            }
            
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain");
            response.getWriter().write(html);
            
        } catch (SQLException ex) {
            Logger.getLogger(RHH_CALENDARIO_EMPRESA_CONTROLLER.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private String cambiomes(HttpServletRequest request, Conexion con) throws SQLException {
        
        String html="";
        int ano = Integer.parseInt(request.getParameter("ano"));
        int mes = Integer.parseInt(request.getParameter("mes"))-1;
        Calendar cal = new GregorianCalendar();
        cal.set(ano, mes, 1);        
        int semanadas=cal.getActualMaximum(Calendar.WEEK_OF_MONTH)+1;
        int maximodia=cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        int diames=1;
        RHH_CALENDARIO_EMPRESA calemp = new RHH_CALENDARIO_EMPRESA(con);
        RHH_TIPO_DIA tipo = new RHH_TIPO_DIA(con);
        int j = cal.get(Calendar.DAY_OF_WEEK);
        int semanaactual=1;
        
        if(j==1)
        {
            semanadas++;
            j=0;
        }
        
        
        html+="<thead>";
        html+="<th>Lunes</th>";
        html+="<th>Martes</th>";
        html+="<th>Miercoles</th>";
        html+="<th>Jueves</th>";
        html+="<th>Viernes</th>";
        html+="<th>Sabado</th>";
        html+="<th>Domingo</th>";
        html+="</thead>";
        html+="<tbody>";
        
        while(semanaactual<=semanadas)
        {
            html+="<tr>";
            cal.set(ano, mes, diames);           
                
            
            int diasemana=1;
            while(diasemana<=7)
            {
                if(diasemana+1==j||j==0)
                {
                    if(j==0)
                    {
                        html+="<td></td>";
                        html+="<td></td>";
                        html+="<td></td>";
                        html+="<td></td>";
                        html+="<td></td>";
                        html+="<td></td>";
                        int evento = calemp.BuscarEvento(diames,mes+1,ano);
                            if(evento!=0)
                                html+="<td style='background: "+tipo.Buscar(evento).getCOLOR()+";' onClick='addDia(this);'><div>"+tipo.Buscar(evento).getDESCRIPCION() +"</div><div style='font-size:25px;'>"+diames+"</div></td>";
                            else
                                html+="<td onClick='addDia(this);'><div>Dia Laboral</div><div style='font-size:25px;'>"+diames+"</div></td>";   
                        diames++;
                        j=1;
                        break;
                    }
                    else
                    {
                        if(diames<=maximodia)
                        {
                            int evento = calemp.BuscarEvento(diames,mes+1,ano);
                            if(evento!=0)
                                html+="<td style='background: "+tipo.Buscar(evento).getCOLOR()+";' onClick='addDia(this);'><div>"+tipo.Buscar(evento).getDESCRIPCION() +"</div><div style='font-size:25px;'>"+diames+"</div></td>";
                            else
                                html+="<td onClick='addDia(this);'><div>Dia Laboral</div><div style='font-size:25px;'>"+diames+"</div></td>";
                        }
                        else
                        {
                            html+="<td></td>";
                        }
                        diames++;
                         j++;
                    }                                           
                }
                else
                {
                    html+="<td></td>";
                }
                diasemana++;
            }
            j=2;
            html+="</tr>";
            semanaactual++;
        }
                
        html+="</tbody>";
        return html;
    }

    private String cargatipos(HttpServletRequest request, Conexion con) throws SQLException {
        String html="";
        
        List<RHH_TIPO_DIA> lista = new RHH_TIPO_DIA(con).Todos();        
        html+="<li onClick='cambiardia(0);'>Dia Laboral</li>";
        for (int i = 0; i < lista.size(); i++) {
            html+="<li onClick='cambiardia("+lista.get(i).getID()+");', style='background:"+lista.get(i).getCOLOR()+";'>"+lista.get(i).getDESCRIPCION()+"</li>";
        }        
        return html;
    }

    private String cambiartipo(HttpServletRequest request, Conexion con) throws SQLException {
        int idtipo = Integer.parseInt(request.getParameter("idtipo"));
        int dia = Integer.parseInt(request.getParameter("dia"));
        int mes = Integer.parseInt(request.getParameter("mes"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        
        String html="{\"nombre\":\"";
        
        RHH_CALENDARIO_EMPRESA cal = new RHH_CALENDARIO_EMPRESA(con);
        cal = cal.Buscar(dia, mes, ano);
        
        RHH_TIPO_DIA tipo = new RHH_TIPO_DIA(con).Buscar(idtipo);
        
        if(cal!=null)
        {               
            if(idtipo==0)
            {
                cal.EliminarXid();
                 html+="Dia Laboral\",\"color\":\"#FFFFFF\"}";
            }
            else
            {
                cal.update(idtipo, tipo.getDESCRIPCION());
                html+=tipo.getDESCRIPCION()+"\",\"color\":\""+tipo.getCOLOR()+"\"}";
                 RHH_ACTIVIDAD_CARGO calcar = new RHH_ACTIVIDAD_CARGO(con);
                 calcar.setHORA_INICIO(cal.getFECHASF());
                 calcar.EliminarxFecha();
            }
        }
        else
        {
            cal = new RHH_CALENDARIO_EMPRESA(con);
        Calendar fecha = new GregorianCalendar();
           fecha.set(ano, mes-1, dia);
           cal.setDESCRIPCION(tipo.getDESCRIPCION());
           cal.setID_TIPO(tipo.getID());
           cal.setFECHA(fecha.getTime());
           cal.Insertar();
           RHH_ACTIVIDAD_CARGO calcar = new RHH_ACTIVIDAD_CARGO(con);
            calcar.setHORA_INICIO(cal.getFECHASF());
            calcar.EliminarxFecha();
           html+=tipo.getDESCRIPCION()+"\",\"color\":\""+tipo.getCOLOR()+"\"}";
        }
        
        return html;
    }

    private String creartipo(HttpServletRequest request, Conexion con) throws SQLException {
        String html="";
        String desc = request.getParameter("desc");
        String color = request.getParameter("color");
        
        RHH_TIPO_DIA tipo = new RHH_TIPO_DIA(desc, 0, color);
        tipo.setCon(con);
        int id=tipo.Insertar();
        html+="<li onClick='cambiardia("+id+");', style='background:"+color+"'>"+desc+"</li>";
        return html;
    }

    private String crearFinesDeSemana(HttpServletRequest request, Conexion con) throws SQLException {
        String html="";
        
        int lunes = Integer.parseInt(request.getParameter("lunes"));
        int martes = Integer.parseInt(request.getParameter("martes"));
        int miercoles = Integer.parseInt(request.getParameter("miercoles"));
        int jueves = Integer.parseInt(request.getParameter("jueves"));
        int viernes = Integer.parseInt(request.getParameter("viernes"));
        int sabado = Integer.parseInt(request.getParameter("sabado"));
        int domingo = Integer.parseInt(request.getParameter("domingo"));
        int ano = Integer.parseInt(request.getParameter("ano"));
        
        RHH_CALENDARIO_EMPRESA cal = new RHH_CALENDARIO_EMPRESA(con);
        cal.CrearFinDeSemana(domingo,lunes,martes,miercoles,jueves,viernes,sabado,ano);
        return html;
    }
    
}
